Certo, è possibile usare lo stesso Index Server per fare questo lavoro, ma in molti casi (sopratutto in caso di sistemi piccoli gestiti in proprio) ed in particolar modo con siti non molto grandi, può essere utile non usare Index Server per risparmiare preziose riserve sul server e metterle a disposizione delle nostre applicazioni ASP.
Per indicizzare il sito serve costruire una tabella sul nostro database, Access per esempio, son una struttura simile:
| Struttura Tabella Documenti di Access | |
| Doc_ID | Campo numerico valore intero, chiave primaria della tabella rappresenta l'ID del documento da cercare utile per l'impaginazione e la navigazione tra i risultati. |
| Doc_URL | Campo testo del valore di 50 caratteri, indica il percorso del file HTML da cercare, /web/miapagina.html |
| Titolo | Campo testo, del valore di 200 caratteri, contiene il titolo della pagina HTML. |
| Descrizione | Campo testo o memo, è una breve descrizone della pagina HTML e delle informazioni che contiene, rappresenta il campo in cui verrà effettuata la ricerca della parola inserita dall'utente. |
Quando inseriamo una nuova pagina web nel nostro sito dobbiamo indicizzarla.
Per fare questo sarà necessario inserire il suo titolo, il percorso e una breve
descrizione dei contenuti all'interno della tabella Documenti,
per il momento a mano, ed il gioco è fatto.
Per fare un buon lavoro nella
descrizione dovete tentare di inserire il maggior numero di parole chiave, per
rendere la ricerca più precisa e vasta.
Con la seconda parte verrà spiegato
come avvantaggiarsi dell'uso dei META TAGS per automatizzare il tutto.
Abbiamo essenzialmete due files, uno contenente il form per la ricerca
ricerca.html e uno contenente lo scripts asp per l'interrogazione del
database, risultati.asp.
<form action="risultati.asp" method="post">
<input
type="Text" name="StringaDaCercare" size="8" maxlength="20">
<input
type="Submit" value="Go">
<input type="Hidden" name="ID"
value="0">
<input type="Hidden" name="operatore"
value="AND">
</form>
<!--#include virtual="/scripts/adovbs.inc"-->
<%
'Connessione al database
Dim Conn
Set Conn =
Server.CreateObject("ADODB.Connection")
Conn.Open "DNS_DATABASE;"
'Setta le preferenze
OperatoreBooleano =
Request.form("operatore")
RecordsPerPagina = 5
'Recupera la stringa da ricercare
Dim
strRicerca
strRicerca = Request.form("StringaDaCercare")
'Recupera ID del documento da ricercare
ID =
Request.Form("ID")
'Definisci l'istruzione SQL
Dim stmSQL,
tmpSQL
stmSQL = "SELECT * FROM Documenti WHERE "
tmpSQL = "(Descrizione
LIKE "
'Suddividi la stringa da cercare
Dim
Pos
Pos = 1
While Pos > 0
Pos = InStr(1, strRicerca," ")
If Pos =
0 Then
'Ho trovato una sola parola nella stringa da
ricercare
tmpSQL = tmpSQL & "'%" & strRicerca &
"%')"
Else
'Ci sono più parole, quindi concateno le
istruzioni LIKE SQL
tmpSQL = tmpSQL & "'%" &
Mid(strRicerca,1,Pos) & "%' " & OperatoreBooleano & " Descrizione
LIKE "
strRicerca = Mid(strRicerca,Pos+1,len(strRicerca))
End
If
Wend
'Costruisco la stringa finale dell'istruzione
SQL
stmSQL = stmSQL & tmpSQL & " AND Doc_ID > " &
ID
stmSQL = stmSQL & " ORDER BY Doc_ID" 'Importante
!
'Genero una variabile per stipare il contenuto della
mia interrogazione
Dim rsDocTrovati
Set rsDocTrovati =
Server.CreateObject("ADODB.Recordset")
'Prendo solo il numero di risultati massimi per
pagina
rsDocTrovati.MaxRecords = RecordsPerPagina
'Setto le propietà del recordsets trovato (include
ADOVBS.inc per la definizione delle constanti)
rsDocTrovati.CursorType
= adForwardOnly
'Riempio con i valori trovati il mio recordset
rsDocTrovati
rsDocTrovati.Open stmSQL, "DNS_DATABASE;"
'Comincio a generare il codice HTML per mostrare i
risultati
'Ottengo il numero totale di record trovati dallo statements SQL
tmpSQL
Dim rsTotalRecords
stmSQL = "SELECT COUNT(*) FROM Documenti
WHERE " & tmpSQL
Set rsTotalRecords = Conn.Execute(stmSQL)
'Verifichiamo quanti risultati massimi possiamo
avere
Dim rsMaxID
stmSQL = "SELECT MAX(Doc_ID) FROM Documenti WHERE
" & tmpSQL
Set rsMaxID = Conn.Execute(stmSQL)
%>
<table width="100%" border="0" cellspacing="2" cellpadding="0">
<% if rsDocTrovati.EOF then 'Nessuna corrispondenza
trovata
%>
<tr><td
height="59"></td></tr>
<tr><td align="center"
valign="top">
<font size="+1">Nessun articolo o pagina HTML è stata
trovata.</font><P>
<A
HREF="javascript:history.back(-1)"><font size="+1">Torna alla pagina
precedente</font></A>
</td></tr>
<tr><td
height="59"></td></tr>
<% Else
Dim
IDCorrente
%>
<tr bgcolor="660033">
<td width="30%"
align="center"><font
color="White"><b>Titolo</b></font></td>
<td
align="center"><font
color="White"><b>Descrizione
dell'articolo</b></font></td>
</tr>
<tr><td
height="10" colspan="2"></td></tr>
<%
While Not rsDocTrovati.EOF
IDCorrente = rsDocTrovati("Doc_ID")
%>
<tr>
<td align="left" valign="top"><A
HREF='<%=rsDocTrovati("Doc_URL")%>'>
<font
size="2"><%=rsDocTrovati("Titolo")%></font></A></td>
<td><font
size="2"><%=rsDocTrovati("Descrizione")%></font></td>
</tr>
<tr><td
height="10" colspan="2"></td></tr>
<%
rsDocTrovati.MoveNext
Wend %>
<tr bgcolor="660033"><td height="10" colspan="2"
align="center">
<% If rsTotalRecords(0)=1 then
%>
<b><font color="White">La ricerca sul database ha portato
alla luce <b><strong>un
solo</strong></b> documento
!!!</font></b>
<% Else %>
<b><font
color="white">La ricerca sul database ha portato alla luce
<%=rsTotalRecords(0)%> documenti
!!!</b></font>
<%
End If %>
</td></tr>
<tr><td height="35"
colspan="2"></td></tr>
<tr><td colspan="2"
align="center">
<% if IDCorrente < rsMaxID(0) then %>
<!-- Se sono più di 5 documenti produco un tasto per la
visualizzazione degli altri documenti -->
<FORM METHOD=POST ACTION='<%=
Request.ServerVariables("SCRIPT_NAME") %>'>
<INPUT TYPE=HIDDEN
NAME="StringaDaCercare"
VALUE='<%=Request.form("StringaDaCercare")%>'>
<input
type="Hidden" name="ID" value='<%=IDCorrente%>'>
<INPUT
TYPE=SUBMIT VALUE="Successivi Documenti">
</FORM>
<% end if
end if
'Fine dello script
%>
Naturalmente questo è solo il primo passo. In questo articolo è stato solo trattato la costruzione dell'interfaccia del motore di ricerca.
Per approfondimenti su come accedere a database, si consiglia la lettura di questo articolo, con la cui lettura si può arrivare a capire a fondo il codice presente in questo articolo.